搭建Hadoop+Python的大数据开发环境 |
您所在的位置:网站首页 › python 集群 › 搭建Hadoop+Python的大数据开发环境 |
实验环境
CentOS镜像为CentOS-7-x86_64-Everything-1804.iso 虚机配置 节点名称 IP地址 子网掩码 CPU/内存 磁盘 安装方式 master 192.168.204.101 255.255.255.0 1核心/4GB 100GB GNOME Desktop slave1 192.168.204.111 255.255.255.0 1核心/2GB 100GB Minimal Install slave2 192.168.204.112 255.255.255.0 1核心/2GB 100GB Minimal Install 软件清单 软件名称 版本号 Hadoop 2.8.1 Hive 2.1.1 Sqoop 1.4.6 Java 1.8.0_131 MariaDB 5.5.60 Python 2.7.5/3.6.2 配置基本环境 安装虚拟机master节点以GNOME Desktop安装 slave节点以Minimal Install安装 用户名 密码 root hadoop hadoop hadoop 配置网络该项同时在master、slave1、slave2节点配置。 该项使用root身份配置。 检查网络连通性 [root@localhost ~]# ping 114.114.114.114 -c 4修改dns地址 [root@localhost ~]# vi /etc/resolv.conf #修改为 nameserver 223.5.5.5更换阿里yum源 [1] mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo yum makecache更换阿里pip源 [2] mkdir ~/.pip/ vim ~/.pip/pip.conf写入以下内容 [global] index-url = https://mirrors.aliyun.com/pypi/simple/yum方式安装基本工具 [root@localhost ~]# yum install -y tree vim epel-* net-tools ntpdate wget编辑网络配置 [root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33根据虚机配置表配置以下信息 TYPE="Ethernet" UUID="17cd99b5-4414-4f6e-b7a3-e573104dd306" ONBOOT="yes" DEVICE="ens33" NAME="ens33" BOOTPROTO="static" IPADDR=192.168.204.101 NETMASK=255.255.255.0 GATEWAY=192.168.204.2 DNS1=223.5.5.5保存退出后,重启网络服务 [root@localhost ~]# systemctl restart network查看网络信息 [root@localhost ~]# ifconfig 配置防火墙该项同时在master、slave1、slave2节点配置。 该项使用root身份配置。 关闭并禁止自动启动防火墙 [root@localhost ~]# systemctl stop firewalld [root@localhost ~]# systemctl disable firewalld禁止SELinux [root@localhost ~]# setenforce 0配置禁止开机自启SELinux [root@localhost ~]# vim /etc/selinux/config将SELINUX=enforcing改成SELINUX=disabled 该项同时在master、slave1、slave2节点配置。 该项使用root身份配置。 修改network配置文件 [root@localhost ~]# vim /etc/hostname主节点修改为master,从节点相应修改为slave1,slave2 输入以下命令(从节点修改为相应名称) [root@localhost ~]# hostname master重启虚机 [root@localhost ~]# reboot重新进入控制台,检验修改 [root@master ~]# hostname 修改hosts文件该项同时在master、slave1、slave2节点配置。 该项使用root身份配置。 输入以下命令,配置hosts文件 [root@master ~]# vim /etc/hosts根据实验环境,添加以下条目至hosts文件 192.168.204.101 master 192.168.204.111 slave1 192.168.204.112 slave2检查hosts是否生效 ping master ping slave1 ping slave2该项同时在master、slave1、slave2节点配置。 该项使用root身份配置。 配置定时任务 crontab -e #输入以下配置,设置同步时间的定时任务 0 1 * * * /usr/sbin/ntpdate cn.pool.ntp.org使用下列命令,使时间立即同步 /usr/sbin/ntpdate cn.pool.ntp.org该项使用hadoop用户身份配置。 该项按照步骤依次在各个节点配置。 主节点master 在主节点master输入以下命令生成秘钥 [hadoop@master ~]$ ssh-keygen -t rsa复制公钥文件 [hadoop@master ~]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys从节点slave1 在从节点slave1输入以下命令生成秘钥,并将秘钥发送给master [hadoop@slave1 ~]$ ssh-keygen -t rsa [hadoop@slave1 ~]$ cp ~/.ssh/id_rsa.pub ~/.ssh/slave1-id_rsa.pub [hadoop@slave1 ~]$ scp ~/.ssh/slave1-id_rsa.pub hadoop@master:~/ [hadoop@slave1 ~]$ rm -rf ~/.ssh/slave1-id_rsa.pub从节点slave2 在从节点slave2输入以下命令生成秘钥,并将秘钥发送给master [hadoop@slave2 ~]$ ssh-keygen -t rsa [hadoop@slave2 ~]$ cp ~/.ssh/id_rsa.pub ~/.ssh/slave2-id_rsa.pub [hadoop@slave2 ~]$ scp ~/.ssh/slave2-id_rsa.pub hadoop@master:~/ [hadoop@slave2 ~]$ rm -rf ~/.ssh/slave2-id_rsa.pub主节点master 复制从节点的秘钥文件,追加到authorized_keys文件中 [hadoop@master ~]$ cat ~/slave1-id_rsa.pub >> ~/.ssh/authorized_keys [hadoop@master ~]$ cat ~/slave2-id_rsa.pub >> ~/.ssh/authorized_keys修改authorized_keys文件权限,并复制到从节点 [hadoop@master ~]$ chmod 600 ~/.ssh/authorized_keys [hadoop@master ~]$ scp ~/.ssh/authorized_keys hadoop@slave1:~/ [hadoop@master ~]$ scp ~/.ssh/authorized_keys hadoop@slave2:~/从节点slave1 修改authorized_keys文件权限,并复制到ssh文件夹 [hadoop@slave1 ~]$ chmod 600 ~/authorized_keys [hadoop@slave1 ~]$ cp ~/authorized_keys ~/.ssh从节点slave2 修改authorized_keys文件权限,并复制到ssh文件夹 [hadoop@slave2 ~]$ chmod 600 ~/authorized_keys [hadoop@slave2 ~]$ cp ~/authorized_keys ~/.ssh主节点master 查看authorized_keys文件内容 [hadoop@master ~]$ cat ~/.ssh/authorized_keys测试主节点master到从节点的登录情况 [hadoop@master ~]$ ssh slave1 [hadoop@master ~]$ ssh slave2主节点master 创建软件包目录、数据目录、代码目录 mkdir ~/software mkdir ~/data mkdir ~/code将软件包上传至~/software目录 将jdk复制到从节点 cp ~/software/jdk-*.tar.gz ~/ scp ~/jdk-*.tar.gz hadoop@slave1:~/ scp ~/jdk-*.tar.gz hadoop@slave2:~/该项同时在master、slave1、slave2节点配置。 该项使用root身份配置。 解压安装java mkdir /usr/java cp /home/hadoop/jdk-*.tar.gz /usr/java cd /usr/java tar -xzvf jdk-*.tar.gz配置环境变量 vim /home/hadoop/.bash_profile # 追加以下内容 #JAVA export JAVA_HOME=/usr/java/jdk1.8.0_131 #注意替换版本号 export PATH=$JAVA_HOME/bin:$PATH刷新环境变量 source /home/hadoop/.bash_profile查看Java版本 java -version 安装Hadoop该项仅在master主节点配置 该项使用hadoop身份配置。 解压Hadoop安装包解压安装包 cp ~/software/hadoop-*.tar.gz ~/ cd ~ tar -xzvf hadoop-*.tar.gz cd hadoop-* 配置Hadoop 配置环境变量 hadoop-env.sh输入以下命令,配置hadoop配置文件中的jdk路径 vim /home/hadoop/hadoop-*/etc/hadoop/hadoop-env.sh将export JAVA_HOME={JAVA_HOME} 修改为export JAVA_HOME=/usr/java/jdk1.8.0_131 注意版本号 输入以下命令,配置yarn配置文件中的jdk路径 vim /home/hadoop/hadoop-*/etc/hadoop/yarn-env.sh将export JAVA_HOME=/home/y/libexec/jdk1.6.0/ 修改为export JAVA_HOME=/usr/java/jdk1.8.0_131/ 输入以下命令 vim /home/hadoop/hadoop-*/etc/hadoop/core-site.xml用以下文本替代 fs.defaultFS hdfs://master:9000 hadoop.tmp.dir /home/hadoop/hadoopdata 配置 hdfs-site.xml输入以下命令 vim /home/hadoop/hadoop-*/etc/hadoop/hdfs-site.xml用以下文本替代 dfs.replication 1 配置 yarn-site.xml输入以下命令 vim /home/hadoop/hadoop-*/etc/hadoop/yarn-site.xml用以下文本替代 yarn.nodemanager.aux-services mapreduce_shuffle yarn.resourcemanager.address master:18040 yarn.resourcemanager.scheduler.address master:18030 yarn.resourcemanager.resource-tracker.address master:18025 yarn.resourcemanager.admin.address master:18141 yarn.resourcemanager.webapp.address master:18088 配置 mapred-site.xml输入以下命令 vim /home/hadoop/hadoop-*/etc/hadoop/mapred-site.xml写入以下文本 mapreduce.framework.name yarn 配置slaves文件输入以下命令 vim /home/hadoop/hadoop-*/etc/hadoop/slaves替换成以下内容 slave1 slave2 复制到从节点输入以下命令,将master的hadoop程序复制到从节点 scp -r /home/hadoop/hadoop-2.8.1/ hadoop@slave1:~/ scp -r /home/hadoop/hadoop-2.8.1/ hadoop@slave2:~/输入以下命令,添加环境变量 vim ~/.bash_profile #追加以下内容 #HADOOP export HADOOP_HOME=/home/hadoop/hadoop-2.8.1 export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH刷新环境变量 source ~/.bash_profile该项仅在master主节点配置 该项使用hadoop身份配置。 在master,slave上,创建数据目录 mkdir /home/hadoop/hadoopdata在master上,执行格式化HDFS文件系统命令 hdfs namenode -format出现以下信息,表示格式化成功 Hadoop启动过程如下 正常情况下,会出现如下信息: 正常情况下,会出现如下信息: 浏览器输入http://master:50070/,检查NameNode和DataNode是否正常启动 浏览器输入http://master:18088/,检查Yarn是否正常 Hadoop自带有PI示例的jar包,执行以下命令调用集群进行计算: hadoop jar /home/hadoop/hadoop-2.8.1/share/hadoop/mapreduce/hadoopmapreduce-examples-2.8.1.jar pi 10 10运行过程 运行结果如下 该项仅在master主节点配置 该项使用hadoop身份配置。 在命令行依次输入以下命令 hdfs dfs -ls / hdfs dfs -mkdir /data hdfs dfs -ls /可查看刚刚创建的目录 编辑一个文本文件 mkdir /home/hadoop/data/words vim /home/hadoop/data/words/word.txt写入以下内容 hadoop hello world hello hadoop hello world hadoop hello将本地文件上传至HDFS hdfs dfs -mkdir /data/words hdfs dfs -put /home/hadoop/data/word/*.txt /data/words/ hdfs dfs -ls /data/words/ hdfs dfs -cat /data/words/*.txt该项仅在master主节点配置 该项使用root身份配置。 解压Hive安装包解压安装Hive cp /home/hadoop/software/apache-hive-*-bin.tar.gz /home/hadoop/ cd /home/hadoop tar -xzvf /home/hadoop/apache-hive-*-bin.tar.gz cd /home/hadoop/apache-hive-*-bin 安装MariaDB安装配置MariaDB yum install mariadb-server -y启动MariaDB systemctl start mairadb systemctl enable mairadb输入以下命令,修改MariaDB密码 mysql_secure_installation登录数据库,添加数据 mysql -uroot -p123456输入以下SQL语句,添加mysql用户 grant all on *.* to hadoop@'%' identified by 'hadoop'; grant all on *.* to hadoop@'localhost' identified by 'hadoop'; grant all on *.* to hadoop@'master' identified by 'hadoop'; flush privileges; create database hive_1; quit;该项仅在master主节点配置 该项使用hadoop身份配置。 输入以下命令,修改Hive配置 vim /home/hadoop/apache-hive-*-bin/conf/hive-site.xml添加以下配置信息 hive.metastore.local true javax.jdo.option.ConnectionURL jdbc:mysql://master:3306/hive_1?characterEncoding=UTF-8 javax.jdo.option.ConnectionDriverName com.mysql.jdbc.Driver javax.jdo.option.ConnectionUserName hadoop javax.jdo.option.ConnectionPassword hadoop 将mysql的java connector复制到依赖库中 cd ~/software/ tar -xzvf mysql-connector-java-5.1.27.tar.gz cd ~/software/mysql-connector-java-5.1.27 cp mysql-connector-java-5.1.27-bin.jar ~/apache-hive-*bin/lib/ 将hive添加至环境变量 vim ~/.bash_profile #添加以下内容 #HIVE export HIVE_HOME=/home/hadoop/apache-hive-2.1.1-bin export PATH=$PATH:$HIVE_HOME/bin刷新环境变量 source ~/.bash_profile初始化hive元数据库 [3] schematool -dbType mysql -initSchema 启动并验证Hive输入以下命令,启动hive hive正常启动如下: 输入以下HQL语句 show databases; create database hadoop_data; show databaes;该项仅在master主节点配置 该项使用hadoop身份配置。 解压Sqoop安装包 cp ~/software/sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz ~/ cd ~ tar -xzvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz cd ~/sqoop-1.4.6.bin__hadoop-2.0.4-alpha 配置MySQL连接器 cd ~/software/mysql-connector-java-5.1.27 cp mysql-connector-java-5.1.27-bin.jar ~/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/lib/ 配置Sqoop 输入以下命令,编辑配置文件 cd ~/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/conf/ cp sqoop-env-template.sh sqoop-env.sh替换为以下内容 #Set path to where bin/hadoop is available export HADOOP_COMMON_HOME=/home/hadoop/hadoop-2.8.1 #Set path to where hadoop-*-core.jar is available export HADOOP_MAPRED_HOME=/home/hadoop/hadoop-2.8.1 #set the path to where bin/hbase is available #export HBASE_HOME= #Set the path to where bin/hive is available export HIVE_HOME=/home/hadoop/apache-hive-2.1.1-bin替换时注意版本号 配置环境变量输入以下命令,修改环境变量 vim ~/.bash_profile #追加以下内容 #SQOOP export SQOOP_HOME=/home/hadoop/sqoop-1.4.6.bin__hadoop-2.0.4-alpha export PATH=$SQOOP_HOME/bin:$PATH刷新环境变量 source ~/.bash_profile此时,~/.bash_profile文件的内容如下 执行以下命令,查看安装是否成功 sqoop help正确情况,如图所示 该项在各个节点使用root用户配置 安装依赖包 yum install -y zlib-devel bzip2-devel \ openssl-devel ncurses-devel sqlite-devel \ readline-devel tk-devel gcc make 备份原Python可执行文件 mv /usr/bin/python /usr/bin/python.bak 下载并解压python3.x wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz tar -xvJf Python-3.6.2.tar.xz cd Python-3.* 编译安装 ./configure prefix=/usr/local/python3 make && make install 创建软连接创建软连接 ln -s /usr/local/python3/bin/python3 /usr/bin/python ln -s /usr/local/python3/bin/python3 /usr/bin/python3 ln -s /usr/local/python3/bin/python3 /usr/bin/python3.6查看/usr/bin/目录下的python程序 ls -l /usr/bin/python*输入命令查看各程序版本 python -V python2 -V python2.7 -V python3 -V python3.6 -V将#!/usr/bin/python修改为#!/usr/bin/python2 将#!/usr/bin/python修改为#!/usr/bin/python2 查看修改情况 ls -l /usr/bin/pip*centos7 安装Python3.x的脚本 网速略差时不建议使用 #!/bin/bash yum install -y zlib-devel bzip2-devel openssl-devel \ ncurses-devel sqlite-devel readline-devel tk-devel gcc make mv /usr/bin/python /usr/bin/python.bak cd ~ wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz tar -xvJf Python-3.6.2.tar.xz cd ~/Python-3.6.2/ ./configure prefix=/usr/local/python3 make && make install ln -s /usr/local/python3/bin/python3 /usr/bin/python ln -s /usr/local/python3/bin/python3 /usr/bin/python3 ln -s /usr/local/python3/bin/python3 /usr/bin/python3.6 ls -l /usr/bin/python* python -V python2 -V python2.7 -V python3 -V python3.6 -V sed -i 's/#!\/usr\/bin\/python/#!\/usr\/bin\/python2/g' /usr/bin/yum sed -i 's/#!\/usr\/bin\/python/#!\/usr\/bin\/python2/g' /usr/libexec/urlgrabber-ext-down mv /usr/bin/pip /usr/bin/pip.bak ln -s /usr/local/python3/bin/pip3 /usr/bin/pip ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3 ls -l /usr/bin/pip* 安装开发软件在master节点使用root用户 安装IPython pip3 install ipython 安装数据分析的常用库 pip3 install matplotlib pip3 install numpy pip3 install PyMySQL pip3 install PrettyTable mkdir /home/hadoop/code/lib/ wget -O /home/hadoop/code/lib/echarts.js http://echarts.baidu.com/dist/echarts.js 安装Spyder [5] cd /home/hadoop/ wget https://files.pythonhosted.org/packages/e5/e2/cc0dff05e9fd98799f9255809e8359bc05d62c4ff850b1f7cf22d3d662c0/spyder-3.3.4.tar.gz cp ./spyder-3.3.4.tar.gz /usr/local cd /usr/local tar -xzvf ./spyder-3.3.4.tar.gz cd ./spyder-3.3.4 python3 setup.py install ln -s /usr/local/spyder-3.3.4/scripts/spyder3 /usr/bin/spyder3在master节点使用hadoop用户 打开Spyder spyder3在master节点使用hadoop用户 下载几部英文小说 cd ~/data/ wget https://files.cnblogs.com/files/connect/novel.tar.gz tar -xzvf novel.tar.gz进入hive,将数据加载至hive,然后统计top20高频词 -- 创建数据库 create database if not exists wordcount_data; -- 使用wordcount_data数据库 use wordcount_data; -- 创建数据表 create table if not exists wordcount1 ( word string, count int ) row format delimited fields terminated by '\t' stored as textfile; -- 加载数据 load data inpath '/data/result/' overwrite into table wordcount_data.wordcount1; -- 查询TOP20高频词 select * from wordcount_data.wordcount1 order by count desc limit 20; -- 将TOP20高频词导入新的数据表 create table if not exists wordcount1_top20 as select word, count from wordcount_data.wordcount1 order by count desc limit 20; -- 查看wordcount1_top20数据表中的数据 select * from wordcount1_top20 where true;查询结果 进入MySQL数据库 mysql -uhadoop -phadoop创建MySQL数据库 -- 创建数据库 create database if not exists wordcount_data; -- 使用wordcount_data use wordcount_data; -- 创建数据表 create table if not exists wordcount1_top20 ( word varchar(128), count int )default -- 查看创建的数据表 show tables; 利用Sqoop将数据导出至MySQLmaster节点执行导出操作 [7] sqoop export \ --connect jdbc:mysql://192.168.204.101:3306/wordcount_data \ --username hadoop \ --password hadoop \ --table wordcount1_top20 \ --export-dir "/user/hive/warehouse/wordcount_data.db/wordcount1_top20" \ --fields-terminated-by '\001'导出成功如图 查看MySQL数据库 use wordcount_data; show tables; select * from wordcount1_top20 where 1;程序如下: #!/usr/bin/python3 import pymysql import numpy as np import matplotlib.pyplot as plt # get data from mysql def get_data(): db = pymysql.connect('192.168.204.101', 'hadoop', 'hadoop', 'wordcount_data') sql = 'select * from wordcount1_top20 where 1 order by count desc limit 20;' cursor = db.cursor() length = cursor.execute(sql) data = cursor.fetchall() db.close() data = np.array(data) data = data.T return data # show chart def show_chart(data): labels, sizes = data[0], data[1] fig1, ax1 = plt.subplots() ax1.pie(sizes, labels=labels, autopct='%1.1f%%', shadow=True, startangle=90) ax1.axis('equal') plt.show() if __name__ == '__main__': data = get_data() show_chart(data)效果如下 本文链接: https://www.cnblogs.com/connect/p/hadoop-python-dev-env.html |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |